package controllers;

import play.*;
import play.mvc.*;
import play.mvc.Scope.Session;

import java.util.*;

import models.*;
import play.cache.Cache;
import play.db.*;
import util.ValidatorUtil;

import java.sql.*;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponseWrapper;

public class Application extends Controller {

	public static List<Usuarios> lista = new ArrayList<Usuarios>();

	public static void index() {
		render();
	}
	
	public static void principal(){
		render();
	}
	
	/**
	 * Método que já se explica pelo nome, toma essa equipe de requisitos!!!!. 
	 * 
	 * @author Deivison Guarines
	 */
	public static void login(String email, String senha) throws SQLException {
		
		ResultSet rs = null;
		Connection con = null;
		Statement s = null;
		
		if(ValidatorUtil.isEmpty(email) && ValidatorUtil.isEmpty(senha)){
			flash.error("Os campos estão em branco.");
			index();
		}
		if(ValidatorUtil.isEmpty(email)){
			flash.error("Campo Email esta em branco.");
			index();
		}
		if(ValidatorUtil.isEmpty(senha)){
			flash.error("Campo Senha esta em branco.");
			index();
		}

		con = DB.getConnection();
		
		String sql = "SELECT * FROM usuario WHERE email ='" + email.toUpperCase().trim()
				+ "' AND senha ='" + senha.toUpperCase().trim() + "'";

		try {
			s = con.createStatement();
			rs = s.executeQuery(sql);

			Usuario usuario = new Usuario();
			
			while (rs.next()) {
				usuario.setId(rs.getLong("id"));
				usuario.setNome(rs.getString("nome"));
				usuario.setSobrenome(rs.getString("sobrenome"));
				usuario.setEmail(rs.getString("email"));
				usuario.setSenha(rs.getString("senha"));
			}

			if (!ValidatorUtil.isEmpty(usuario.getNome())) {
				session.put("usuario", usuario.getId().toString());
				flash.success("Olá %s ", usuario.getNome());
				principal();
			}else {
				flash.error("Email ou Senha incorretos.");
				index();
			}
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		} finally {
			if (rs != null)
				rs.close();
			if (s != null)
				s.close();
			if (con != null)
				con.close();
		}

	}
	
	/**
	 * Retorna a "pessoa" cujo login está registrado na sessão
	 */
	public static Usuario getLogin() {
		String id = session.get("usuario");

		if (id != null) {
			Usuario usuario = Usuario.findById(Long.parseLong(id));
			return usuario;
		}
		return null;
	}
	
	/**
	 * Remove os dados da sessão, efetuando o logout
	 */
	public static void logout() {
		session.remove("usuario");
		index();
	}
	
	 /**
     * Verifica se o usuário está logado
     * @return
     */
    public static boolean isLogged()
    {
    	return Session.current().get("usuario")!=null;
    }
	
}